function quickSort(array) {
    if (array.length <= 1) { // 基线条件：如果数组长度小于等于1，直接返回数组
        return array;
    }
    const pivotIndex = Math.floor(array.length / 2); // 找到数组的中心节点索引位置
    const pivot = array[pivotIndex]; // 获取数组中心节点的值
    const left = [];
    const right = [];
    for (let i = 0; i < array.length; i++) { // 将数组中的元素分为左右两部分
        if (i === pivotIndex) {
            continue;
        }
        if (array[i] < pivot) { // 如果该元素小于中心节点的值，则放入左半部分
            left.push(array[i]);
        } else { // 如果该元素大于等于中心节点的值，则放入右半部分
            right.push(array[i]);
        }
    }
    return [...quickSort(left), pivot, ...quickSort(right)]; // 递归处理左半部分和右半部分，并将中心节点的值插入到中间
}
// 重写Array.prototype.sort()
// 重写Array.prototype.sort()
Array.prototype.sort = function (callback) {
    let arrayCopy = [...this]; // 创建当前数组的副本
    if (callback) { // 如果传入了回调函数
        const newArray = []; // 新建一个数组
        for (let i = 0; i < arrayCopy.length; i++) {
            newArray.push({ value: arrayCopy[i], index: i }); // 为每个元素创建一个包含值和索引的对象
        }
        newArray.sort((a, b) => { // 根据回调函数排序新数组
            const result = callback(a.value, b.value);
            return result === 0 ? a.index - b.index : result;
        });
        arrayCopy = newArray.map(item => item.value); // 仅保留值，而忽略原始索引
    } else { // 否则使用快速排序算法进行排序
        arrayCopy = quickSort(arrayCopy);
    }
    for (let i = 0; i < this.length; i++) { // 使用排序后的数组替换当前数组中的元素
        this[i] = arrayCopy[i];
    }
    return this; // 返回排序后的当前数组
};
// 测试用例
const arr = [5, 3, 8, 1, 2, 7, 4, 6];
console.log(arr.sort()); // [1, 2, 3, 4, 5, 6, 7, 8]
console.log(arr.sort((a, b) => b - a)); // [8, 7, 6, 5, 4, 3, 2, 1]
